package movilmax.sia_corp.action;

import java.util.HashMap;
import java.util.Map;

import utilidades.Cadena;

import movilmax.sia_corp.model.Usuario;
import apli.conectar.Conectar;
import basedatos.Resultado;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ActualizarDatosUsuario extends ActionSupport{
	private static final long serialVersionUID = 7139724553695741487L;
	
	  private Usuario USUARIO_;
	  private Conectar BASE; 

	  private Map<String, Usuario> accordion;
	  private String rp_gd="NO";
	  private String msg_gd="";
		 
	  public void validate(){	
		try{
			 this.setRp_gd("ERR");
			  Map<?, ?> session = ActionContext.getContext().getSession();
			  Usuario USUARIO = (Usuario)session.get("ses_usuario");
			  if (USUARIO==null){	
			    	this.addActionError("La sesion del usuario ha caducado");
			    	this.setMsg_gd("La sesion del usuario ha caducado");
				    return;
			  }
			  if(USUARIO.getDiasc()<0 && USUARIO_.getClave1().length()==0 ){
				  this.addActionError( "Debe realizar el cambio de clave");
				  this.setMsg_gd("Debe realizar el cambio de clave");
				  return; 
			  }
			  if(USUARIO_.getClave1().length()>0){
			     Cadena C=new Cadena();
			     if(!C.encriptarVj(USUARIO_.getClave1()).equals(USUARIO.getClave())){	
					this.addActionError( "Clave actual invalida");
					this.setMsg_gd("Clave actual invalida");
					return;
				 }
			     if (USUARIO_.getClave2().length() < 8 ){	
					this.addActionError( "La clave debe contener un minimo de 8 caracteres");
					this.setMsg_gd("La clave debe contener un minimo de 8 caracteres");
					return;
				 }
			     if(C.encriptarVj(USUARIO_.getClave2()).equals(USUARIO.getClave())){	
					this.addActionError( "La nueva clave no puede ser igual a la clave actual");
					this.setMsg_gd("La nueva clave no puede ser igual a la clave actual");
					return;
				 }
			     if (USUARIO_.getClave2().equals("12345678")){	
					this.addActionError( "No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					this.setMsg_gd("No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					return;
				 }
			     if (USUARIO_.getClave2().equals("123456789")){	
					this.addActionError( "No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					this.setMsg_gd("No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					return;
				 }
			     if (USUARIO_.getClave2().equals("1234567890")){	
					this.addActionError( "No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					this.setMsg_gd("No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					return;
				 }
			     if (USUARIO_.getClave2().equals("12345678901")){	
					this.addActionError( "No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					this.setMsg_gd("No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					return ;
				 }
			     if (USUARIO_.getClave2().equals("123456789012")){	
					this.addActionError( "No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					this.setMsg_gd("No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					return;
				 }
			     if (USUARIO_.getClave2().equals("1234567890123")){	
					this.addActionError( "No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					this.setMsg_gd("No se puede establecer La clave: "+USUARIO_.getClave2()+", es predecible");
					return;
				 } 
			     USUARIO_.setDescripcion(USUARIO_.getDescripcion().replace("'","*"));
			     if(USUARIO_.getDescripcion().length() == 0 ){
					 this.addActionError("Debe indicar la descripcion");
					 this.setMsg_gd("Debe indicar la descripcion");
					 return;
				 }
		     }	
		}catch(Exception err){
			//this.setRp_gd("ERR.");
			//err.printStackTrace();
		}
	  } 
	  public String guardar(){
		  this.setRp_gd("ERR");
		  Map<?, ?> session = ActionContext.getContext().getSession();
		  Usuario USUARIO = (Usuario)session.get("ses_usuario");
		  if(USUARIO == null){
			 this.addActionError("La sesion ha caducado");
			 this.setMsg_gd("La sesion ha caducado");
			 return ERROR;
		  }
		  String SQL="";
		  String des="",tel="02120000000",cel="04120000000",ext="0707",ccv="";
				  if(USUARIO_.getClave1().length()>0){
					    Cadena C=new Cadena();
					    ccv=",clave2='"+ C.encriptarVj(USUARIO_.getClave2()) +"',cla_expira=GETDATE()+30 ";
				  }
				  des=USUARIO_.getDescripcion().trim();
				  
				  if(USUARIO_.getTelefono().length() != 0)
					  tel=USUARIO_.getTelefono().trim();
				  
				  if(USUARIO_.getCelular().length() != 0 )
					  cel=USUARIO_.getCelular().trim();
			      
				  if(USUARIO_.getExt().length() != 0 )
					  ext=USUARIO_.getExt().trim();
				  
			BASE= new Conectar();
		    if(BASE.getMsg().equals("SI")){	  
				  SQL = "UPDATE usuarios set descripcion='"+des+"',telefono='"+tel+"',celular='"+cel+"',ext='"+ext+"' "+ccv+
				  		"WHERE usuario='"+USUARIO.getUsuario()+"' ";
				  if(BASE.getBaseDatos().ejecutar(SQL)){
					  this.addActionMessage("Sus datos han sido actualizados");
					  this.setRp_gd("OK");
					  this.setMsg_gd("Sus datos han sido actualizados");
					  BASE.getBaseDatos().cerrarConexion(); 
					  return SUCCESS;
				  }else{
					  this.addActionError("No se pudo realizar la actualizacion de datos...");
					  this.setMsg_gd("No se pudo realizar la actualizacion de datos...");
					  return ERROR; //debe iniciar session 
				  }
		    }else{
				  this.addActionError("No hay conexion al servidor");
				  this.setMsg_gd("No se pudo realizar la actualizacion de datos...");
				  return ERROR; //debe iniciar session
		    }
	  }	  

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public String consultar() throws Exception{
		  accordion = new HashMap<String, Usuario>();
		  Map session = ActionContext.getContext().getSession();
		   Usuario USUARIO = (Usuario)session.get("ses_usuario");
		   if (USUARIO==null){	
		       this.addActionError("La sesion del usuario ha caducado");
			   return ERROR;
		   }
		   if(USUARIO.getDiasc()<0 ){
			   if(USUARIO.getMsg_c().equals("SI") ){
				   this.setRp_gd("ERR");
				   this.setMsg_gd("Debe realizar el cambio de clave para poder iniciar sesion");
				   USUARIO.setMsg_c("NO");
				   session.put("ses_usuario",USUARIO);
			   }
		   }
		   BASE= new Conectar();
		   String SQL="";
		   USUARIO_=new Usuario();
			if(BASE.getMsg().equals("SI")){
				SQL="Select descripcion,cargo,email,celular,telefono,ext,clave2 from usuarios where usuario='"+USUARIO.getUsuario()+"' ";  
				Resultado RCS=BASE.getBaseDatos().consultar(SQL);
				if(RCS.RP){
					USUARIO_.setDescripcion(RCS.getCadena("descripcion"));
					USUARIO_.setEmail(RCS.getCadena("email"));
					USUARIO_.setCelular(RCS.getCadena("celular"));
					USUARIO_.setTelefono(RCS.getCadena("telefono"));
					USUARIO_.setExt(RCS.getCadena("ext"));
					USUARIO_.setCargo(RCS.getCadena("cargo"));
					accordion.put("DATOS USUARIO", USUARIO_);
				}
			  BASE.getBaseDatos().cerrarConexion(); 
			}
		  return SUCCESS;
	 }
	  
	public String actualizar_clave() throws Exception{
	    return SUCCESS; 
	}
	public Usuario getUSUARIO_() {
		return USUARIO_;
	}
	public void setUSUARIO_(Usuario uSUARIO_) {
		USUARIO_ = uSUARIO_;
	}
	public Map<String, Usuario> getAccordion() {
		return accordion;
	}
	public void setAccordion(Map<String, Usuario> accordion) {
		this.accordion = accordion;
	}
	public String getRp_gd() {
		return rp_gd;
	}
	public void setRp_gd(String rp_gd) {
		this.rp_gd = rp_gd;
	}
	public String getMsg_gd() {
		return msg_gd;
	}
	public void setMsg_gd(String msg_gd) {
		this.msg_gd = msg_gd;
	}
     
}
